/**************************************************************************
 * @name: fork_test.c
 * @brief: 这是在linux系统下使用fork函数创建子进程的代码案例
 * @date: 2025/02/07
 * @author: boluzs@163.com
 * @note:
 *      1.fork函数可以创建子进程，fork的返回值有3种情况，>0：父进程 ==0：子进程 <0：异常
 *      2.在进程中调用fork函数的时候就已经创建了
 *      3.获取当前进程的PID可以使用getpid()函数，获取当前进程的父进程使用getppid()函数
 *      4.父进程和子进程具有各自独立的进程空间
 *      5.如果父进程比子进程先结束，则子进程会变成孤儿进程，会被守护进程收养
 * @version: 1.0.0
 * @Copyright (c) 2025 by boluzs@163.com, All Rights Reserved.
 **************************************************************************/
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
    int status = 0;
    __pid_t pid = fork(); // 创建子进程

    if (pid > 0)
    {
        wait(NULL);
        // 父进程
        printf("父进程PID:%d\n", getpid());
    }
    else if (pid == 0)
    {
        // 子进程
        printf("当前进程PID:%d,当前进程的父进程PID:%d\n", getpid(), getppid());
    }
    else
    {
        // fork() 失败
        fprintf(stderr, "fork error,errno = %d,%s\n", errno, strerror(errno));
        return -1;
    }
    return 0;
}
